package array;

/**
 * 给你一组多米诺骨牌 dominoes 。
 * 形式上，dominoes[i] = [a, b] 与 dominoes[j] = [c, d] 等价 当且仅当 (a == c 且 b == d) 或者 (a == d 且 b == c) 。
 * 即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。
 * 在 0 <= i < j < dominoes.length 的前提下，找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。
 * <p>
 * 示例 1：
 * 输入：dominoes = [[1,2],[2,1],[3,4],[5,6]]
 * 输出：1
 * <p>
 * 示例 2：
 * 输入：dominoes = [[1,2],[1,2],[1,1],[1,2],[2,2]]
 * 输出：3
 *
 * @author Jisheng Huang
 * @version 20250504
 */
public class NumOfEquiDominoPairs_1128_2 {
    /**
     * Loop through the array and compose the [small * 10 + big] and store in an array
     *
     * @param dominoes the given 2d array
     * @return the number of equivalent pairs greater than 1
     */
    public static int numEquivDominoPairs(int[][] dominoes) {
        int[] nums = new int[100];
        int ret = 0;

        for (int[] d : dominoes) {
            int val = d[0] < d[1] ? d[0] * 10 + d[1] : d[1] * 10 + d[0];
            ret += nums[val];
            ++nums[val];
        }

        return ret;
    }

    public static void main(String[] args) {
        int[][] dominoes = {{1, 2}, {2, 1}, {3, 4}, {5, 6}};
        System.out.println(numEquivDominoPairs(dominoes));

        dominoes = new int[][]{{1, 2}, {1, 2}, {1, 1}, {1, 2}, {2, 2}};
        System.out.println(numEquivDominoPairs(dominoes));
    }
}